<!DOCTYPE html>
<html lang="en-US">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width,initial-scale=1">
    <title>JS 对象的常用属性 | Guru Note</title>
    <meta name="generator" content="VuePress 1.7.1">
    <link rel="stylesheet" href="./font/index.css">
    <script src="/docs/icon/svg.js"></script>
    <meta name="description" content="Sea of dawn">
    
    <link rel="preload" href="/docs/assets/css/0.styles.efa081cd.css" as="style"><link rel="preload" href="/docs/assets/js/app.cdec4db9.js" as="script"><link rel="preload" href="/docs/assets/js/2.993bd611.js" as="script"><link rel="preload" href="/docs/assets/js/56.8a160b09.js" as="script"><link rel="preload" href="/docs/assets/js/7.5a12abef.js" as="script"><link rel="prefetch" href="/docs/assets/js/10.c3177bdb.js"><link rel="prefetch" href="/docs/assets/js/100.60c23478.js"><link rel="prefetch" href="/docs/assets/js/101.7ea29e1b.js"><link rel="prefetch" href="/docs/assets/js/102.7f47e485.js"><link rel="prefetch" href="/docs/assets/js/103.ea9ce400.js"><link rel="prefetch" href="/docs/assets/js/104.4ec6a518.js"><link rel="prefetch" href="/docs/assets/js/105.75526347.js"><link rel="prefetch" href="/docs/assets/js/106.01f6b03b.js"><link rel="prefetch" href="/docs/assets/js/107.69fe0811.js"><link rel="prefetch" href="/docs/assets/js/108.fa23768b.js"><link rel="prefetch" href="/docs/assets/js/109.90df1698.js"><link rel="prefetch" href="/docs/assets/js/11.54347528.js"><link rel="prefetch" href="/docs/assets/js/110.dd8d7227.js"><link rel="prefetch" href="/docs/assets/js/111.ccf25ceb.js"><link rel="prefetch" href="/docs/assets/js/112.6963298f.js"><link rel="prefetch" href="/docs/assets/js/113.30ceb3d8.js"><link rel="prefetch" href="/docs/assets/js/114.42ef6603.js"><link rel="prefetch" href="/docs/assets/js/115.f1db7817.js"><link rel="prefetch" href="/docs/assets/js/116.92971223.js"><link rel="prefetch" href="/docs/assets/js/117.c5a65e7e.js"><link rel="prefetch" href="/docs/assets/js/118.e329035d.js"><link rel="prefetch" href="/docs/assets/js/119.cbb17c5e.js"><link rel="prefetch" href="/docs/assets/js/12.c8144ee8.js"><link rel="prefetch" href="/docs/assets/js/120.8537f6a6.js"><link rel="prefetch" href="/docs/assets/js/121.257d3851.js"><link rel="prefetch" href="/docs/assets/js/122.96a5f921.js"><link rel="prefetch" href="/docs/assets/js/123.2220fd12.js"><link rel="prefetch" href="/docs/assets/js/124.552b1a29.js"><link rel="prefetch" href="/docs/assets/js/125.4e36fe37.js"><link rel="prefetch" href="/docs/assets/js/126.3939cdcc.js"><link rel="prefetch" href="/docs/assets/js/127.014df434.js"><link rel="prefetch" href="/docs/assets/js/13.edc237a8.js"><link rel="prefetch" href="/docs/assets/js/14.66270d4f.js"><link rel="prefetch" href="/docs/assets/js/15.0804164b.js"><link rel="prefetch" href="/docs/assets/js/16.dec928ab.js"><link rel="prefetch" href="/docs/assets/js/17.bbfc90a8.js"><link rel="prefetch" href="/docs/assets/js/18.76904860.js"><link rel="prefetch" href="/docs/assets/js/19.80a98011.js"><link rel="prefetch" href="/docs/assets/js/20.c39e42bd.js"><link rel="prefetch" href="/docs/assets/js/21.287b744a.js"><link rel="prefetch" href="/docs/assets/js/22.c9506be7.js"><link rel="prefetch" href="/docs/assets/js/23.9732a229.js"><link rel="prefetch" href="/docs/assets/js/24.21ed1f05.js"><link rel="prefetch" href="/docs/assets/js/25.8f1926f6.js"><link rel="prefetch" href="/docs/assets/js/26.61b6eb9f.js"><link rel="prefetch" href="/docs/assets/js/27.3706753c.js"><link rel="prefetch" href="/docs/assets/js/28.b6b182cf.js"><link rel="prefetch" href="/docs/assets/js/29.ae979ad9.js"><link rel="prefetch" href="/docs/assets/js/3.a7f8dd77.js"><link rel="prefetch" href="/docs/assets/js/30.f2233269.js"><link rel="prefetch" href="/docs/assets/js/31.06780314.js"><link rel="prefetch" href="/docs/assets/js/32.2dad91d1.js"><link rel="prefetch" href="/docs/assets/js/33.87ec6e22.js"><link rel="prefetch" href="/docs/assets/js/34.7b75f220.js"><link rel="prefetch" href="/docs/assets/js/35.3184991f.js"><link rel="prefetch" href="/docs/assets/js/36.28248fbe.js"><link rel="prefetch" href="/docs/assets/js/37.5824a979.js"><link rel="prefetch" href="/docs/assets/js/38.99a364fe.js"><link rel="prefetch" href="/docs/assets/js/39.a5f43732.js"><link rel="prefetch" href="/docs/assets/js/4.a55d89ed.js"><link rel="prefetch" href="/docs/assets/js/40.629f78f7.js"><link rel="prefetch" href="/docs/assets/js/41.e4f58d1c.js"><link rel="prefetch" href="/docs/assets/js/42.9f41aa47.js"><link rel="prefetch" href="/docs/assets/js/43.636412b6.js"><link rel="prefetch" href="/docs/assets/js/44.3b491aef.js"><link rel="prefetch" href="/docs/assets/js/45.77df19bc.js"><link rel="prefetch" href="/docs/assets/js/46.01f53ddd.js"><link rel="prefetch" href="/docs/assets/js/47.476e85c9.js"><link rel="prefetch" href="/docs/assets/js/48.198502dc.js"><link rel="prefetch" href="/docs/assets/js/49.0d59d332.js"><link rel="prefetch" href="/docs/assets/js/5.1597c0f8.js"><link rel="prefetch" href="/docs/assets/js/50.02baf101.js"><link rel="prefetch" href="/docs/assets/js/51.c9fbd54d.js"><link rel="prefetch" href="/docs/assets/js/52.4cb4459b.js"><link rel="prefetch" href="/docs/assets/js/53.248450d7.js"><link rel="prefetch" href="/docs/assets/js/54.83f12d1e.js"><link rel="prefetch" href="/docs/assets/js/55.b18accba.js"><link rel="prefetch" href="/docs/assets/js/57.b854a940.js"><link rel="prefetch" href="/docs/assets/js/58.4500f315.js"><link rel="prefetch" href="/docs/assets/js/59.59400e36.js"><link rel="prefetch" href="/docs/assets/js/6.887ba020.js"><link rel="prefetch" href="/docs/assets/js/60.4dd5b5bb.js"><link rel="prefetch" href="/docs/assets/js/61.50d8c8f6.js"><link rel="prefetch" href="/docs/assets/js/62.17d10daa.js"><link rel="prefetch" href="/docs/assets/js/63.d5f821cc.js"><link rel="prefetch" href="/docs/assets/js/64.7bf2519f.js"><link rel="prefetch" href="/docs/assets/js/65.0a1c9bc8.js"><link rel="prefetch" href="/docs/assets/js/66.1bcaa81c.js"><link rel="prefetch" href="/docs/assets/js/67.326bdf9b.js"><link rel="prefetch" href="/docs/assets/js/68.2b3b63b2.js"><link rel="prefetch" href="/docs/assets/js/69.c9b1a1a9.js"><link rel="prefetch" href="/docs/assets/js/70.a5fede78.js"><link rel="prefetch" href="/docs/assets/js/71.288d9643.js"><link rel="prefetch" href="/docs/assets/js/72.8665d6b8.js"><link rel="prefetch" href="/docs/assets/js/73.47155429.js"><link rel="prefetch" href="/docs/assets/js/74.4d4738f8.js"><link rel="prefetch" href="/docs/assets/js/75.659a325f.js"><link rel="prefetch" href="/docs/assets/js/76.a263f692.js"><link rel="prefetch" href="/docs/assets/js/77.9d86d59e.js"><link rel="prefetch" href="/docs/assets/js/78.a41b5d88.js"><link rel="prefetch" href="/docs/assets/js/79.5d0fc4cc.js"><link rel="prefetch" href="/docs/assets/js/8.80d0c81d.js"><link rel="prefetch" href="/docs/assets/js/80.01a11f6a.js"><link rel="prefetch" href="/docs/assets/js/81.9c0207d9.js"><link rel="prefetch" href="/docs/assets/js/82.12be8e04.js"><link rel="prefetch" href="/docs/assets/js/83.00fa5f46.js"><link rel="prefetch" href="/docs/assets/js/84.f14cd53c.js"><link rel="prefetch" href="/docs/assets/js/85.e9d7c0d1.js"><link rel="prefetch" href="/docs/assets/js/86.eb78fbbf.js"><link rel="prefetch" href="/docs/assets/js/87.8a31f5ae.js"><link rel="prefetch" href="/docs/assets/js/88.0f10e6dc.js"><link rel="prefetch" href="/docs/assets/js/89.a17253c9.js"><link rel="prefetch" href="/docs/assets/js/9.2fa568cb.js"><link rel="prefetch" href="/docs/assets/js/90.e56bc609.js"><link rel="prefetch" href="/docs/assets/js/91.5277db18.js"><link rel="prefetch" href="/docs/assets/js/92.b0bb8aa7.js"><link rel="prefetch" href="/docs/assets/js/93.cd790b77.js"><link rel="prefetch" href="/docs/assets/js/94.76bbe227.js"><link rel="prefetch" href="/docs/assets/js/95.4f07ca32.js"><link rel="prefetch" href="/docs/assets/js/96.2b1e8485.js"><link rel="prefetch" href="/docs/assets/js/97.e93b3461.js"><link rel="prefetch" href="/docs/assets/js/98.658063a1.js"><link rel="prefetch" href="/docs/assets/js/99.a3642e6d.js">
    <link rel="stylesheet" href="/docs/assets/css/0.styles.efa081cd.css">
  </head>
  <body>
    <div id="app" data-server-rendered="true"><div class="theme-container"><header class="navbar"><div class="sidebar-button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" role="img" viewBox="0 0 448 512" class="icon"><path fill="currentColor" d="M436 124H12c-6.627 0-12-5.373-12-12V80c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12z"></path></svg></div> <a href="/docs/" class="home-link router-link-active"><!----> <span class="site-name">Guru Note</span></a> <div class="links"><div class="search-box"><input aria-label="Search" autocomplete="off" spellcheck="false" value=""> <!----> <svg aria-hidden="true" class="icon search-icon"><use xlink:href="#icon-search"></use></svg></div> <nav class="nav-links can-hide"><div class="nav-item"><a href="/docs/layout/" class="nav-link">
  CSS 手册
</a></div><div class="nav-item"><a href="/docs/js/" class="nav-link router-link-active">
  JavaScript
</a></div><div class="nav-item"><div class="dropdown-wrapper"><button type="button" aria-label="前端进阶" class="dropdown-title"><span class="title">前端进阶</span> <span class="arrow down"></span></button> <button type="button" aria-label="前端进阶" class="mobile-dropdown-title"><span class="title">前端进阶</span> <span class="arrow right"></span></button> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><h4>
          前端框架
        </h4> <ul class="dropdown-subitem-wrapper"><li class="dropdown-subitem"><a href="/docs/vue/" class="nav-link">
  Vue.js
</a></li><li class="dropdown-subitem"><a href="/docs/react/" class="nav-link">
  React.js
</a></li></ul></li><li class="dropdown-item"><h4>
          拓展语言
        </h4> <ul class="dropdown-subitem-wrapper"><li class="dropdown-subitem"><a href="/docs/node/" class="nav-link">
  Node.js
</a></li><li class="dropdown-subitem"><a href="/docs/ts/" class="nav-link">
  TypeScript
</a></li></ul></li></ul></div></div><div class="nav-item"><a href="/docs/devbook/" class="nav-link">
  开发手册
</a></div><div class="nav-item"><a href="/docs/exam/" class="nav-link">
  金九银十
</a></div><div class="nav-item"><a href="/docs/message/" class="nav-link">
  留言板
</a></div> <!----></nav></div></header> <div class="sidebar-mask"></div> <aside class="sidebar"><div class="el-scrollbar"><div class="scrollbar-wrapper el-scrollbar__wrap el-scrollbar__wrap--hidden-default"><div class="el-scrollbar__view"><nav class="nav-links"><div class="nav-item"><a href="/docs/layout/" class="nav-link">
  CSS 手册
</a></div><div class="nav-item"><a href="/docs/js/" class="nav-link router-link-active">
  JavaScript
</a></div><div class="nav-item"><div class="dropdown-wrapper"><button type="button" aria-label="前端进阶" class="dropdown-title"><span class="title">前端进阶</span> <span class="arrow down"></span></button> <button type="button" aria-label="前端进阶" class="mobile-dropdown-title"><span class="title">前端进阶</span> <span class="arrow right"></span></button> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><h4>
          前端框架
        </h4> <ul class="dropdown-subitem-wrapper"><li class="dropdown-subitem"><a href="/docs/vue/" class="nav-link">
  Vue.js
</a></li><li class="dropdown-subitem"><a href="/docs/react/" class="nav-link">
  React.js
</a></li></ul></li><li class="dropdown-item"><h4>
          拓展语言
        </h4> <ul class="dropdown-subitem-wrapper"><li class="dropdown-subitem"><a href="/docs/node/" class="nav-link">
  Node.js
</a></li><li class="dropdown-subitem"><a href="/docs/ts/" class="nav-link">
  TypeScript
</a></li></ul></li></ul></div></div><div class="nav-item"><a href="/docs/devbook/" class="nav-link">
  开发手册
</a></div><div class="nav-item"><a href="/docs/exam/" class="nav-link">
  金九银十
</a></div><div class="nav-item"><a href="/docs/message/" class="nav-link">
  留言板
</a></div> <!----></nav>  <ul class="sidebar-links"><li><a href="/docs/js/" aria-current="page" class="sidebar-link">介绍</a></li><li><section class="sidebar-group depth-0"><p class="sidebar-heading open"><span>JavaScript</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/docs/js/base/type-of-data.html" class="sidebar-link">JS 的数据类型</a></li><li><a href="/docs/js/base/object.html" aria-current="page" class="active sidebar-link">JS 对象的常用属性</a></li><li><a href="/docs/js/base/function.html" class="sidebar-link">函数 &amp; 原型链</a></li><li><a href="/docs/js/base/dom-api.html" class="sidebar-link">DOM API 总结</a></li><li><a href="/docs/js/base/node-api.html" class="sidebar-link">节点 API 总结</a></li><li><a href="/docs/js/base/node-list.html" class="sidebar-link">节点中的伪数组</a></li><li><a href="/docs/js/base/dom-operate-across-threads.html" class="sidebar-link">DOM 操作跨线程</a></li><li><a href="/docs/js/base/create-jquery.html" class="sidebar-link">jQuery 中的链式操作</a></li><li><a href="/docs/js/base/plugin.html" class="sidebar-link">JavaScript 插件 / 库</a></li></ul></section></li><li><section class="sidebar-group depth-0"><p class="sidebar-heading"><span>ES6</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/docs/js/es6/scope.html" class="sidebar-link">作用域</a></li><li><a href="/docs/js/es6/new-object.html" class="sidebar-link">新版对象</a></li><li><a href="/docs/js/es6/anatomy-assignment.html" class="sidebar-link">参数处理 &amp; 解构赋值</a></li><li><a href="/docs/js/es6/new-string.html" class="sidebar-link">新版字符串</a></li><li><a href="/docs/js/es6/module-use.html" class="sidebar-link">ES6 模块化</a></li><li><a href="/docs/js/es6/promise-usage.html" class="sidebar-link">Promise</a></li><li><a href="/docs/js/es6/await-and-async.html" class="sidebar-link">async 和 await 的用法</a></li><li><a href="/docs/js/es6/symbol-iterate-generate.html" class="sidebar-link">Symbol &amp; 迭代器 &amp; 生成器</a></li><li><a href="/docs/js/es6/arrow-function.html" class="sidebar-link">箭头函数</a></li><li><a href="/docs/js/es6/new-api.html" class="sidebar-link">ES6 新增 API</a></li></ul></section></li><li><section class="sidebar-group depth-0"><p class="sidebar-heading"><span>JavaScript 进阶</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/docs/js/part/ajax-use.html" class="sidebar-link">AJAX</a></li><li><a href="/docs/js/part/cross-domain.html" class="sidebar-link">跨域 &amp; CORS &amp; JSONP</a></li><li><a href="/docs/js/part/browser-storage.html" class="sidebar-link">浏览器模型</a></li></ul></section></li><li><section class="sidebar-group depth-0"><p class="sidebar-heading"><span>JS 小记</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/docs/js/note/project.html" class="sidebar-link">JavaScript 搭建项目</a></li><li><a href="/docs/js/note/js-garbage.html" class="sidebar-link">JS 的缺陷</a></li><li><a href="/docs/js/note/setInterval-a-setTimeout.html" class="sidebar-link">使用 setTimeout 实现 setInterval</a></li><li><a href="/docs/js/note/array-deduplica.html" class="sidebar-link">数组去重</a></li><li><a href="/docs/js/note/download-file.html" class="sidebar-link">使用 JS 下载文件</a></li><li><a href="/docs/js/note/top-nav.html" class="sidebar-link">设置导航动态显示 / 隐藏</a></li><li><a href="/docs/js/note/anchor-transition.html" class="sidebar-link">JS 实现点击锚点过渡效果</a></li><li><a href="/docs/js/note/data-list.html" class="sidebar-link">数据处理</a></li></ul></section></li></ul> </div></div><div class="el-scrollbar__bar is-horizontal"><div class="el-scrollbar__thumb" style="width:0;transform:translateX(0%);ms-transform:translateX(0%);webkit-transform:translateX(0%);"></div></div><div class="el-scrollbar__bar is-vertical"><div class="el-scrollbar__thumb" style="height:0;transform:translateY(0%);ms-transform:translateY(0%);webkit-transform:translateY(0%);"></div></div></div></aside> <main class="page"> <div class="re-page-top"><h1 class="title"><span>JS 对象的常用属性</span></h1> <div class="re-page-index"><div class="page-index-title"><span class="open-catalog"><svg aria-hidden="true" class="icon arrow-right"><use xlink:href="#icon-bold-right"></use></svg> <span class="text">目录</span></span></div> <div class="page-index-content"><div class="page-catalog" style="display:none;"><div class="synopsis-wrap"><ul class="synopsis-ul"><li class="synopsis-li"><a href="/docs/js/base/object.html#对象的属性" class="synopsis-link">对象的属性</a><ul class="synopsis-ul"><li class="synopsis-li"><a href="/docs/js/base/object.html#hasownproperty" class="synopsis-link">hasOwnProperty()</a></li><li class="synopsis-li"><a href="/docs/js/base/object.html#object-keys-object-values" class="synopsis-link">Object.keys() &amp; Object.values()</a></li><li class="synopsis-li"><a href="/docs/js/base/object.html#object-assign" class="synopsis-link">Object.assign()</a></li></ul></li><li class="synopsis-li"><a href="/docs/js/base/object.html#对象的原型" class="synopsis-link">对象的原型</a><ul class="synopsis-ul"><li class="synopsis-li"><a href="/docs/js/base/object.html#object-getprototypeof" class="synopsis-link">Object.getPrototypeOf</a></li><li class="synopsis-li"><a href="/docs/js/base/object.html#object-create" class="synopsis-link">Object.create</a></li><li class="synopsis-li"><a href="/docs/js/base/object.html#object-setprototypeof" class="synopsis-link">Object.setPrototypeOf</a></li></ul></li><li class="synopsis-li"><a href="/docs/js/base/object.html#object-defineproperty-属性修饰符" class="synopsis-link">Object.defineProperty（属性修饰符）</a><ul class="synopsis-ul"><li class="synopsis-li"><a href="/docs/js/base/object.html#设置变量的访问-修改" class="synopsis-link">设置变量的访问/修改</a></li><li class="synopsis-li"><a href="/docs/js/base/object.html#追加访问-修改函数" class="synopsis-link">追加访问 / 修改函数</a></li><li class="synopsis-li"><a href="/docs/js/base/object.html#undefined-的实现原理" class="synopsis-link">undefined 的实现原理</a></li><li class="synopsis-li"><a href="/docs/js/base/object.html#configurable-禁止修改属性" class="synopsis-link">configurable 禁止修改属性</a></li><li class="synopsis-li"><a href="/docs/js/base/object.html#enumerable-可枚举属性" class="synopsis-link">enumerable 可枚举属性</a></li><li class="synopsis-li"><a href="/docs/js/base/object.html#使用-symbol-设置对象的-key" class="synopsis-link">使用 Symbol 设置对象的 key</a></li><li class="synopsis-li"><a href="/docs/js/base/object.html#参考文档" class="synopsis-link">参考文档</a></li></ul></li></ul></div></div></div></div></div> <div class="theme-default-content content__default"><h2 id="对象的属性"><a href="#对象的属性" class="header-anchor">#</a> 对象的属性</h2> <p>以以下案例为例</p> <div class="language-js extra-class"><pre class="language-js"><code><span class="token keyword">let</span> obj <span class="token operator">=</span> <span class="token punctuation">{</span>name<span class="token operator">:</span> <span class="token string">'小明'</span><span class="token punctuation">,</span> age<span class="token operator">:</span> <span class="token number">16</span><span class="token punctuation">}</span>
</code></pre></div><p>使用 <code>delete</code> 删除属性</p> <div class="language-js extra-class"><pre class="language-js"><code><span class="token keyword">delete</span> obj<span class="token punctuation">.</span>name  <span class="token comment">// 或者 delete obj['name']</span>
console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>obj<span class="token punctuation">)</span> <span class="token comment">// {age: 16}</span>
</code></pre></div><blockquote><p>注：delete 仅仅用于删除对象的属性</p></blockquote> <p>使用 <code>in</code> 判断判断属性是否存在</p> <div class="language-js extra-class"><pre class="language-js"><code><span class="token string">'name'</span> <span class="token keyword">in</span> obj <span class="token comment">// true</span>
<span class="token string">'toString'</span> <span class="token keyword">in</span> obj <span class="token comment">// true</span>
</code></pre></div><p>上面的判断有一个缺陷，无法区分对象属性是自身，还是原型链共有的属性。</p> <h3 id="hasownproperty"><a href="#hasownproperty" class="header-anchor">#</a> <code>hasOwnProperty()</code></h3> <p>使用<code>hasOwnProperty()</code>即可判断某个属性定义在对象自身，还是定义在原型链上。</p> <div class="language-js extra-class"><pre class="language-js"><code>obj<span class="token punctuation">.</span><span class="token function">hasOwnProperty</span><span class="token punctuation">(</span><span class="token string">'name'</span><span class="token punctuation">)</span> <span class="token comment">// true</span>
obj<span class="token punctuation">.</span><span class="token function">hasOwnProperty</span><span class="token punctuation">(</span><span class="token string">'toString'</span><span class="token punctuation">)</span> <span class="token comment">// false</span>
</code></pre></div><h3 id="object-keys-object-values"><a href="#object-keys-object-values" class="header-anchor">#</a> <code>Object.keys()</code> &amp; <code>Object.values()</code></h3> <p>查看对象的属性（key）</p> <div class="language-js extra-class"><pre class="language-js"><code>Object<span class="token punctuation">.</span><span class="token function">keys</span><span class="token punctuation">(</span>obj<span class="token punctuation">)</span> <span class="token comment">// [&quot;name&quot;, &quot;age&quot;]</span>
</code></pre></div><p>查看对象的值（value）</p> <div class="language-js extra-class"><pre class="language-js"><code>Object<span class="token punctuation">.</span><span class="token function">values</span><span class="token punctuation">(</span>obj<span class="token punctuation">)</span> <span class="token comment">// [&quot;小明&quot;, 16]</span>
</code></pre></div><h3 id="object-assign"><a href="#object-assign" class="header-anchor">#</a> <code>Object.assign()</code></h3> <p>使用 <code>Object.assign()</code> 批量赋值</p> <div class="language-js extra-class"><pre class="language-js"><code>Object<span class="token punctuation">.</span><span class="token function">assign</span><span class="token punctuation">(</span>obj<span class="token punctuation">,</span> <span class="token punctuation">{</span>p1<span class="token operator">:</span> <span class="token number">1</span><span class="token punctuation">,</span> p2<span class="token operator">:</span> <span class="token number">2</span><span class="token punctuation">,</span> p3<span class="token operator">:</span> <span class="token number">3</span><span class="token punctuation">}</span><span class="token punctuation">)</span>
<span class="token comment">// 输出：{name: &quot;小明&quot;, age: 16, p1: 1, p2: 2, p3: 3}</span>
</code></pre></div><h2 id="对象的原型"><a href="#对象的原型" class="header-anchor">#</a> 对象的原型</h2> <h3 id="object-getprototypeof"><a href="#object-getprototypeof" class="header-anchor">#</a> <code>Object.getPrototypeOf</code></h3> <p>使用 <code>Object.getPrototypeOf</code> 获取对象原型</p> <div class="language-js extra-class"><pre class="language-js"><code><span class="token keyword">let</span> obj1 <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token punctuation">}</span>
<span class="token keyword">let</span> obj2 <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token punctuation">}</span>
Object<span class="token punctuation">.</span><span class="token function">getPrototypeOf</span><span class="token punctuation">(</span>obj1<span class="token punctuation">)</span> <span class="token operator">===</span> Object<span class="token punctuation">.</span><span class="token function">getPrototypeOf</span><span class="token punctuation">(</span>obj2<span class="token punctuation">)</span> <span class="token comment">// true</span>
</code></pre></div><p>几种特殊对象的原型。</p> <div class="language-js extra-class"><pre class="language-js"><code><span class="token comment">// 空对象的原型是 Object.prototype</span>
Object<span class="token punctuation">.</span><span class="token function">getPrototypeOf</span><span class="token punctuation">(</span><span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">)</span> <span class="token operator">===</span> <span class="token class-name">Object</span><span class="token punctuation">.</span>prototype <span class="token comment">// true</span>

<span class="token comment">// Object.prototype 的原型是 null</span>
Object<span class="token punctuation">.</span><span class="token function">getPrototypeOf</span><span class="token punctuation">(</span><span class="token class-name">Object</span><span class="token punctuation">.</span>prototype<span class="token punctuation">)</span> <span class="token operator">===</span> <span class="token keyword">null</span> <span class="token comment">// true</span>

<span class="token comment">// 函数的原型是 Function.prototype</span>
<span class="token keyword">function</span> <span class="token function">f</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span><span class="token punctuation">}</span>
Object<span class="token punctuation">.</span><span class="token function">getPrototypeOf</span><span class="token punctuation">(</span>f<span class="token punctuation">)</span> <span class="token operator">===</span> <span class="token class-name">Function</span><span class="token punctuation">.</span>prototype <span class="token comment">// true</span>
</code></pre></div><p>可以用以下方式获取对象原型的名称。</p> <div class="language-js extra-class"><pre class="language-js"><code>Object<span class="token punctuation">.</span><span class="token function">getPrototypeOf</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">.</span>constructor<span class="token punctuation">.</span>name  <span class="token comment">// &quot;Array&quot;</span>
<span class="token comment">// 或</span>
<span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">.</span>constructor<span class="token punctuation">.</span>name <span class="token comment">// &quot;Array&quot;，前提是如果对象没有定义新的 contructor 属性</span>
</code></pre></div><h3 id="object-create"><a href="#object-create" class="header-anchor">#</a> <code>Object.create</code></h3> <p>使用 <code>Object.create</code> 设置对象原型</p> <div class="language-js extra-class"><pre class="language-js"><code><span class="token comment">// 原型对象</span>
<span class="token keyword">let</span> obj1 <span class="token operator">=</span> <span class="token punctuation">{</span>
    type<span class="token operator">:</span> <span class="token string">'people'</span><span class="token punctuation">,</span>
    <span class="token function">move</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span>console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token string">'我会动'</span><span class="token punctuation">)</span><span class="token punctuation">}</span>
<span class="token punctuation">}</span>
<span class="token keyword">let</span> obj2 <span class="token operator">=</span> Object<span class="token punctuation">.</span><span class="token function">create</span><span class="token punctuation">(</span>obj1<span class="token punctuation">)</span>
obj2<span class="token punctuation">.</span><span class="token function">move</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token comment">// &quot;我会动&quot;</span>
obj2<span class="token punctuation">.</span>type <span class="token operator">===</span> obj1<span class="token punctuation">.</span>type <span class="token comment">// true</span>
</code></pre></div><h3 id="object-setprototypeof"><a href="#object-setprototypeof" class="header-anchor">#</a> <code>Object.setPrototypeOf</code></h3> <p>使用 <code>Object.setPrototypeOf</code> 方法为对象设置原型，返回该对象。它接受两个参数，第一个是现有对象，第二个是原型对象。</p> <div class="language-js extra-class"><pre class="language-js"><code><span class="token keyword">var</span> a <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">;</span>
<span class="token keyword">var</span> b <span class="token operator">=</span> <span class="token punctuation">{</span>x<span class="token operator">:</span> <span class="token number">1</span><span class="token punctuation">}</span><span class="token punctuation">;</span>
Object<span class="token punctuation">.</span><span class="token function">setPrototypeOf</span><span class="token punctuation">(</span>a<span class="token punctuation">,</span> b<span class="token punctuation">)</span><span class="token punctuation">;</span>

Object<span class="token punctuation">.</span><span class="token function">getPrototypeOf</span><span class="token punctuation">(</span>a<span class="token punctuation">)</span> <span class="token operator">===</span> b <span class="token comment">// true</span>
a<span class="token punctuation">.</span>x <span class="token comment">// 1</span>
</code></pre></div><p>上面的代码中，<code>Object.setPrototypeOf</code> 方法将对象 <code>a</code> 的原型，设置为对象 <code>b</code>，因此 <code>a</code> 可以共享 <code>b</code> 的属性。</p> <p>除了上面两种方式，使用<code>b.__proto__ = a</code>也可以设置对象的原型链，但是不推荐，此方式浏览器会默认为非法操作。</p> <h2 id="object-defineproperty-属性修饰符"><a href="#object-defineproperty-属性修饰符" class="header-anchor">#</a> <code>Object.defineProperty</code>（属性修饰符）</h2> <h3 id="设置变量的访问-修改"><a href="#设置变量的访问-修改" class="header-anchor">#</a> 设置变量的访问/修改</h3> <p>可通过给变量设置 get set 方法，改写变量的读取/修改方式，如下</p> <div class="language-js extra-class"><pre class="language-js"><code><span class="token keyword">var</span> i <span class="token operator">=</span> <span class="token number">2</span>
<span class="token keyword">var</span> newObject <span class="token operator">=</span> <span class="token punctuation">{</span>
    <span class="token keyword">get</span> <span class="token function">x</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span> <span class="token keyword">return</span> i <span class="token punctuation">}</span><span class="token punctuation">,</span>
    <span class="token keyword">set</span> <span class="token function">x</span><span class="token punctuation">(</span><span class="token parameter">value</span><span class="token punctuation">)</span><span class="token punctuation">{</span>
        i <span class="token operator">=</span> value <span class="token operator">+</span> i
        <span class="token keyword">return</span> i
    <span class="token punctuation">}</span>
<span class="token punctuation">}</span>
newObject<span class="token punctuation">.</span>x <span class="token comment">// 2</span>
newObject<span class="token punctuation">.</span>x <span class="token operator">=</span> <span class="token number">2</span>
newObject<span class="token punctuation">.</span>x <span class="token comment">// 4</span>
</code></pre></div><p>上面的代码通过给<code>newObject.x</code>设置get方法修改它的返回值为变量<code>i</code>的值，通过给<code>newObject.x</code>设置set方法使得它每次修改时的值都是与变量<code>i</code>加的值（set只允许传入一个参数，该参数就是修改当前方法时赋的值）</p> <h3 id="追加访问-修改函数"><a href="#追加访问-修改函数" class="header-anchor">#</a> 追加访问 / 修改函数</h3> <p>假如一个对象之前并没有 get set 方法，在ES6的语法中可以使用以下方式追加</p> <div class="language-js extra-class"><pre class="language-js"><code><span class="token keyword">let</span> i <span class="token operator">=</span> <span class="token number">2</span>
<span class="token keyword">let</span> o <span class="token operator">=</span> <span class="token punctuation">{</span>
    a<span class="token operator">:</span> <span class="token number">1</span><span class="token punctuation">,</span>
    b<span class="token operator">:</span> <span class="token number">2</span>
<span class="token punctuation">}</span>
Object<span class="token punctuation">.</span><span class="token function">defineProperty</span><span class="token punctuation">(</span>o<span class="token punctuation">,</span> <span class="token string">'x'</span><span class="token punctuation">,</span> <span class="token punctuation">{</span>
    <span class="token function">get</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span> <span class="token keyword">return</span> i <span class="token punctuation">}</span><span class="token punctuation">,</span>
    <span class="token function">set</span><span class="token punctuation">(</span>value<span class="token punctuation">)</span><span class="token punctuation">{</span>
        i <span class="token operator">=</span> value <span class="token operator">+</span> i
        <span class="token keyword">return</span> i
    <span class="token punctuation">}</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span>
o<span class="token punctuation">.</span>x <span class="token operator">=</span> <span class="token number">100</span>
o<span class="token punctuation">.</span>x <span class="token comment">// 102</span>
</code></pre></div><h3 id="undefined-的实现原理"><a href="#undefined-的实现原理" class="header-anchor">#</a> undefined 的实现原理</h3> <p>在JS中，<code>undefined</code>不是关键字 而是一个只读的变量，证明如下</p> <div class="language-js extra-class"><pre class="language-js"><code><span class="token keyword">var</span> <span class="token keyword">function</span> <span class="token comment">// 报错</span>
<span class="token keyword">var</span> <span class="token keyword">null</span> <span class="token comment">// 报错</span>
<span class="token keyword">var</span> <span class="token keyword">this</span> <span class="token comment">// 报错</span>
<span class="token keyword">var</span> <span class="token keyword">undefined</span> <span class="token comment">// undefined</span>
<span class="token keyword">undefined</span> <span class="token operator">=</span> <span class="token number">1</span>
<span class="token keyword">undefined</span> <span class="token comment">// undefined</span>
</code></pre></div><p>所以，如果给变量添加get函数，它就可以基本的实现<code>undefined</code>的只读原理</p> <div class="language-js extra-class"><pre class="language-js"><code><span class="token keyword">let</span> o <span class="token operator">=</span> <span class="token punctuation">{</span>
    <span class="token keyword">get</span> <span class="token keyword">undefined</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span><span class="token keyword">return</span> <span class="token keyword">undefined</span><span class="token punctuation">}</span>
<span class="token punctuation">}</span>
o<span class="token punctuation">.</span>undefined <span class="token comment">// undefined</span>
o<span class="token punctuation">.</span>undefined <span class="token operator">=</span> <span class="token string">'jack'</span>
o<span class="token punctuation">.</span>undefined <span class="token comment">// undefined</span>
</code></pre></div><p>上面的代码中<code>o.undefined</code>每次访问的值都是<code>undefined</code>，不可修改，这就像<code>undefined</code>的只读性。</p> <p>通过给变量设置<code>writable</code>属性为<code>false</code>，也可以实现只读</p> <div class="language-js extra-class"><pre class="language-js"><code><span class="token keyword">let</span> o <span class="token operator">=</span> <span class="token punctuation">{</span>name<span class="token operator">:</span> <span class="token keyword">undefined</span><span class="token punctuation">}</span>
Object<span class="token punctuation">.</span><span class="token function">defineProperty</span><span class="token punctuation">(</span>o<span class="token punctuation">,</span> <span class="token string">'name'</span><span class="token punctuation">,</span> <span class="token punctuation">{</span>writable<span class="token operator">:</span> <span class="token boolean">false</span><span class="token punctuation">}</span><span class="token punctuation">)</span>
o<span class="token punctuation">.</span>name <span class="token comment">// undefined</span>
o<span class="token punctuation">.</span>name <span class="token operator">=</span> <span class="token string">'jack'</span>
o<span class="token punctuation">.</span>name <span class="token comment">// undefined</span>
</code></pre></div><p>上面的代码通过设置，<code>o.name</code>属性的<code>writable: false</code>使得该属性为不可修改的，从而实现类似<code>undefined</code>的只读性。</p> <p>需要注意的是将<code>writable</code>属性设置为<code>true</code>只读属性就会变回可写的</p> <div class="language-js extra-class"><pre class="language-js"><code><span class="token keyword">let</span> o <span class="token operator">=</span> <span class="token punctuation">{</span>name<span class="token operator">:</span> <span class="token keyword">undefined</span><span class="token punctuation">}</span>
Object<span class="token punctuation">.</span><span class="token function">defineProperty</span><span class="token punctuation">(</span>o<span class="token punctuation">,</span> <span class="token string">'name'</span><span class="token punctuation">,</span> <span class="token punctuation">{</span>writable<span class="token operator">:</span> <span class="token boolean">true</span><span class="token punctuation">}</span><span class="token punctuation">)</span>
o<span class="token punctuation">.</span>name <span class="token operator">=</span> <span class="token string">'xxx'</span>
o<span class="token punctuation">.</span>name <span class="token comment">// &quot;xxx&quot;</span>
</code></pre></div><h3 id="configurable-禁止修改属性"><a href="#configurable-禁止修改属性" class="header-anchor">#</a> configurable 禁止修改属性</h3> <p>禁止修改属性，如：value，writable，get，set等</p> <p>当且仅当该属性的 configurable 键值为 true 时，该属性的描述符才能够被改变，同时该属性也能从对应的对象上被删除。
默认值为 false。（设置 configurable 为 true 时，无法修改属性）</p> <p>将上面的对象 o 的 configurable 设置为 true</p> <div class="language-js extra-class"><pre class="language-js"><code><span class="token keyword">let</span> o <span class="token operator">=</span> <span class="token punctuation">{</span>name<span class="token operator">:</span> <span class="token keyword">undefined</span><span class="token punctuation">}</span>
Object<span class="token punctuation">.</span><span class="token function">defineProperty</span><span class="token punctuation">(</span>o<span class="token punctuation">,</span> <span class="token string">'name'</span><span class="token punctuation">,</span> <span class="token punctuation">{</span>writable<span class="token operator">:</span> <span class="token boolean">false</span><span class="token punctuation">,</span> configurable<span class="token operator">:</span> <span class="token boolean">false</span><span class="token punctuation">}</span><span class="token punctuation">)</span>
<span class="token comment">// 此时再修改writable的属性会报错：</span>
Object<span class="token punctuation">.</span><span class="token function">defineProperty</span><span class="token punctuation">(</span>o<span class="token punctuation">,</span> <span class="token string">'name'</span><span class="token punctuation">,</span> <span class="token punctuation">{</span>writable<span class="token operator">:</span> <span class="token boolean">true</span><span class="token punctuation">}</span><span class="token punctuation">)</span> <span class="token comment">// 报错</span>
</code></pre></div><h3 id="enumerable-可枚举属性"><a href="#enumerable-可枚举属性" class="header-anchor">#</a> enumerable 可枚举属性</h3> <p>默认情况下 遍历某个对象或数组，并不能完全遍历该对象/数组的所有属性</p> <div class="language-js extra-class"><pre class="language-js"><code><span class="token comment">// 对象的toString属性并不能被遍历</span>
<span class="token keyword">let</span> obj <span class="token operator">=</span> <span class="token punctuation">{</span>a<span class="token operator">:</span> <span class="token number">1</span><span class="token punctuation">,</span> b<span class="token operator">:</span> <span class="token number">2</span><span class="token punctuation">,</span> c<span class="token operator">:</span> <span class="token number">3</span><span class="token punctuation">}</span>
<span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">let</span> key <span class="token keyword">in</span> obj<span class="token punctuation">)</span><span class="token punctuation">{</span>
    console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>key<span class="token punctuation">)</span>
<span class="token punctuation">}</span>
<span class="token comment">// a b c</span>

<span class="token comment">// 数组的length属性并不能被遍历</span>
<span class="token keyword">let</span> num <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">]</span>
<span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">let</span> key <span class="token keyword">in</span> num<span class="token punctuation">)</span><span class="token punctuation">{</span>
    console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>key<span class="token punctuation">)</span>
<span class="token punctuation">}</span>
<span class="token comment">// 0 1 2</span>
</code></pre></div><p>我们可以通过给对象添加一个 enumerable 修饰符来修改，该对象的属性是否可遍历</p> <div class="language-js extra-class"><pre class="language-js"><code><span class="token keyword">let</span> obj <span class="token operator">=</span> <span class="token punctuation">{</span>a<span class="token operator">:</span> <span class="token number">1</span><span class="token punctuation">,</span> b<span class="token operator">:</span> <span class="token number">2</span><span class="token punctuation">,</span> c<span class="token operator">:</span> <span class="token number">3</span><span class="token punctuation">}</span>
Object<span class="token punctuation">.</span><span class="token function">defineProperty</span><span class="token punctuation">(</span>obj<span class="token punctuation">,</span> <span class="token string">'b'</span><span class="token punctuation">,</span> <span class="token punctuation">{</span>value<span class="token operator">:</span> <span class="token number">2</span><span class="token punctuation">,</span> enumerable<span class="token operator">:</span> <span class="token boolean">false</span><span class="token punctuation">}</span><span class="token punctuation">)</span>
<span class="token keyword">for</span><span class="token punctuation">(</span><span class="token keyword">let</span> key <span class="token keyword">in</span> obj<span class="token punctuation">)</span><span class="token punctuation">{</span>
    console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>key<span class="token punctuation">)</span>
<span class="token punctuation">}</span>
<span class="token comment">// a c</span>
</code></pre></div><p>查看对象的属性描述</p> <div class="language-js extra-class"><pre class="language-js"><code>Object<span class="token punctuation">.</span><span class="token function">getOwnPropertyDescriptor</span><span class="token punctuation">(</span>obj<span class="token punctuation">,</span> <span class="token string">'b'</span><span class="token punctuation">)</span>
<span class="token comment">// {value: 2, writable: true, enumerable: false, configurable: true}</span>
Object<span class="token punctuation">.</span><span class="token function">getOwnPropertyDescriptor</span><span class="token punctuation">(</span>obj<span class="token punctuation">,</span> <span class="token string">'a'</span><span class="token punctuation">)</span>
<span class="token comment">// {value: 1, writable: true, enumerable: true, configurable: true}</span>
</code></pre></div><p>可以批量的给属性添加修饰符</p> <div class="language-js extra-class"><pre class="language-js"><code>Object<span class="token punctuation">.</span><span class="token function">defineProperties</span><span class="token punctuation">(</span>o<span class="token punctuation">,</span> <span class="token punctuation">{</span>
    a<span class="token operator">:</span> <span class="token punctuation">{</span>value<span class="token operator">:</span> <span class="token number">1</span><span class="token punctuation">,</span> writable<span class="token operator">:</span> <span class="token boolean">false</span><span class="token punctuation">}</span><span class="token punctuation">,</span>
    b<span class="token operator">:</span> <span class="token punctuation">{</span>value<span class="token operator">:</span> <span class="token number">2</span><span class="token punctuation">,</span> writable<span class="token operator">:</span> <span class="token boolean">true</span><span class="token punctuation">}</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span>
o<span class="token punctuation">.</span>a <span class="token operator">=</span> <span class="token number">2</span>
o<span class="token punctuation">.</span>a <span class="token comment">// 1</span>
o<span class="token punctuation">.</span>b <span class="token operator">=</span> <span class="token number">4</span>
o<span class="token punctuation">.</span>b <span class="token comment">// 4</span>
</code></pre></div><h3 id="使用-symbol-设置对象的-key"><a href="#使用-symbol-设置对象的-key" class="header-anchor">#</a> 使用 Symbol 设置对象的 key</h3> <div class="language-js extra-class"><pre class="language-js"><code><span class="token keyword">let</span> s <span class="token operator">=</span> <span class="token function">Symbol</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
<span class="token keyword">let</span> o <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token punctuation">[</span>s<span class="token punctuation">]</span><span class="token operator">:</span> <span class="token number">1</span><span class="token punctuation">}</span>
o<span class="token punctuation">[</span>s<span class="token punctuation">]</span> <span class="token comment">// 1</span>
</code></pre></div><p>Symbol 设置的key只能通过 <code>getOwnPropertySymbols</code> 的方式获取</p> <div class="language-js extra-class"><pre class="language-js"><code><span class="token comment">// 获取对象的key 方法1</span>
Object<span class="token punctuation">.</span><span class="token function">keys</span><span class="token punctuation">(</span>o<span class="token punctuation">)</span> <span class="token comment">// []</span>
<span class="token comment">// 获取对象中的 Symbol key</span>
Object<span class="token punctuation">.</span><span class="token function">getOwnPropertySymbols</span><span class="token punctuation">(</span>o<span class="token punctuation">)</span> <span class="token comment">// [Symbol()]</span>
<span class="token comment">// 获取对象的key 方法2</span>
Object<span class="token punctuation">.</span><span class="token function">getOwnPropertyNames</span><span class="token punctuation">(</span>o<span class="token punctuation">)</span> <span class="token comment">// []</span>
</code></pre></div><h3 id="参考文档"><a href="#参考文档" class="header-anchor">#</a> 参考文档</h3> <p>MDN 文档：https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty</p></div> <footer class="page-edit"><!----> <div class="last-updated"><span class="prefix">上次更新：</span><span class="time">2021-02-21 21:26</span></div></footer> <div class="page-nav"><p class="inner"><span class="prev"><svg aria-hidden="true" class="icon"><use xlink:href="#icon-left"></use></svg> <a href="/docs/js/base/type-of-data.html" class="prev">JS 的数据类型</a></span> <span class="next"><a href="/docs/js/base/function.html">函数 &amp; 原型链</a> <svg aria-hidden="true" class="icon"><use xlink:href="#icon-right"></use></svg></span></p></div> </main></div><div class="global-ui"><!----><!----></div></div>
    <script src="/docs/assets/js/app.cdec4db9.js" defer></script><script src="/docs/assets/js/2.993bd611.js" defer></script><script src="/docs/assets/js/56.8a160b09.js" defer></script><script src="/docs/assets/js/7.5a12abef.js" defer></script>
  </body>
</html>
